﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace AdmLaboratorios
{
    public class MDIHelper
    {
        Form frmMDI;
        ToolStrip tblVentanas;
        List<Form> lHijos = new List<Form>();

        public Form FormularioMDI
        {
            get
            {
                return frmMDI;
            }
        }

        public MDIHelper(Form FormularioMDI, ToolStrip ToolStripVentanas)
        {

            try
            {
                //cWait();
                if (FormularioMDI == null | ToolStripVentanas == null)
                {
                    throw new Exception("El formulario o la toolstrip, no son elementos válidos.");
                }

                //Si no es MDI tiro error!
                if (!FormularioMDI.IsMdiContainer)
                {
                    throw new Exception("El formulario pasado por parámetro NO es un MDI.");
                }

                frmMDI = FormularioMDI;
                tblVentanas = ToolStripVentanas;

                //Me aseguro de que la clase atienda el evento 'MdiChildActivate' del MDI.
                //Lo mismo con el evento 'ItemClicked' de la ToolStrip.
                frmMDI.MdiChildActivate += new EventHandler(this.Evento_MdiChildActivate);
                ToolStripVentanas.ItemClicked += new ToolStripItemClickedEventHandler(this.Evento_ItemClicked);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                //cReady();
            }
        }

        private bool usaConfigGrillas = true;
        private bool Saltear = false;

        public bool UsaConfigGrillas
        {
            get { return usaConfigGrillas; }
            set { usaConfigGrillas = value; }
        }

        private void Evento_ItemClicked(System.Object sender, System.Windows.Forms.ToolStripItemClickedEventArgs e)
        {
            //En el Tag guarde el objeto formulario que le corresponde a ese boton.
            if (!(e.ClickedItem.Tag == null))
            {
                ((System.Windows.Forms.Form)e.ClickedItem.Tag).BringToFront();
            }
        }

        private void Evento_MdiChildActivate(object sender, System.EventArgs e)
        {
            bool Existe;

            //Cuando elimino un boton, tambien se llama a este evento...
            //Con esto lo evito.
            if (Saltear)
            {
                Saltear = false;
                return;
            }

            //Recorro la coleccion de hijos.
            //Si falta alguno agrego el boton!
            foreach (Form formulario in frmMDI.MdiChildren)
            {
                Existe = false;
                foreach (ToolStripItem elemento in tblVentanas.Items)
                {
                    if (formulario.Name == elemento.Name)
                    {
                        //Ya existe
                        Existe = true;
                        break;
                    }
                }
                if (!Existe)
                {
                    InsertaBoton(formulario);

                    //Nuevo Form... Le agrego tambien los Handlers.
                    formulario.Activated += new EventHandler(this.Evento_Activated);
                    formulario.FormClosed += new FormClosedEventHandler(this.Evento_FormClosed);
                }
            }
        }

        private void Evento_Activated(object sender, System.EventArgs e)
        {
            ActivoBoton(((Form)sender));
        }

        private void Evento_FormClosed(object sender, System.Windows.Forms.FormClosedEventArgs e)
        {
            QuitoBoton(((Form)sender));
            Saltear = true;
        }

        private void InsertaBoton(Form Ventana)
        {
            ToolStripItem Boton;
            Padding Espaciado = new Padding();

            Espaciado.Left = 5;
            Boton = tblVentanas.Items.Add(Ventana.Text);
            Boton.Name = Ventana.Name;
            Boton.Tag = Ventana;
            Boton.Image = Ventana.Icon.ToBitmap();
            Boton.Margin = Espaciado;
            ActivoBoton(Ventana);

            //Inicializo las grillas.
            if (usaConfigGrillas)
                FormsHelper.CargarColumnasGrilla(Ventana);
        }

        private void ActivoBoton(Form Ventana)
        {
            foreach (ToolStripItem /*TODO: cambiar el nombre de la variable*/ boton in tblVentanas.Items)
            {
                if (boton.Name != "btnAlarmaPendiente")
                {
                    boton.ForeColor = Color.Black;
                    if (boton.Name == Ventana.Name)
                    {
                        boton.ForeColor = Color.Red;
                    }
                }
            }
        }

        private void QuitoBoton(Form Ventana)
        {
            foreach (ToolStripItem /*TODO: cambiar el nombre de la variable*/ boton in tblVentanas.Items)
            {
                if (boton.Name == Ventana.Name)
                {
                    tblVentanas.Items.Remove(boton);
                    break;
                }
            }

            //Guardo config. de las grillas.
            if (usaConfigGrillas)
                FormsHelper.GuardarColumnasGrilla(Ventana);
        }
    }
}
